home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / dev / lang / pcq12src.lzh / Runtime / Readers / readstring.asm < prev   
Assembly Source File  |  1990-12-10  |  1KB  |  47 lines

  1.  
  2. *    ReadString.asm (of PCQ Pascal runtime library)
  3. *    Copyright (c) 1989 Patrick Quaid
  4.  
  5. *    This reads a string from a text file.
  6.  
  7.     INCLUDE    "/FileRec.i"
  8.  
  9. *    Upon entry, a0 points to the string variable address.  That
  10. *    variable is expected to point to a buffer big enough to hold
  11. *    the string.  The longword on top of the stack holds the file
  12. *    record address
  13.  
  14.     SECTION    PCQ_Runtime,CODE
  15.  
  16.     XREF    _p%ReadOneChar
  17.     XREF    _p%GetThatChar
  18.     XREF    _p%IOResult
  19.  
  20.     XDEF    _p%ReadString
  21. _p%ReadString
  22.  
  23.     tst.l    _p%IOResult    ; is IO safe?
  24.     bne    3$
  25.     move.l    (a0),a1        ; get actual buffer address
  26.     move.l    4(sp),a0    ; get the file record address
  27.     move.l    #0,d1        ; length so far
  28. 1$    movem.l    a1/d1,-(sp)    ; save buffer address
  29.     jsr    _p%ReadOneChar    ; get the next character
  30.     movem.l    (sp)+,a1/d1    ; retrieve buffer and length
  31.     tst.l    _p%IOResult    ; was there an error?
  32.     bne    3$
  33.     move.b    d0,0(a1,d1.l)    ; save the character
  34.     addq.l    #1,d1        ; increment the pointer
  35.     cmp.b    #10,d0        ; was it a linefeed?
  36.     beq.s    2$        ; if so, leave
  37.     tst.b    EOF(a0)        ; or if it's at EOF
  38.     bne.s    2$        ; leave if true
  39.     movem.l    a1/d1,-(sp)    ; if not, save regs
  40.     jsr    _p%GetThatChar    ; and eat the current character
  41.     movem.l    (sp)+,a1/d1    ; get the regs back
  42.     bra    1$        ; and loop
  43. 2$    move.b    #0,-1(a1,d1.l)    ; null-terminate the string
  44. 3$    rts            ; and return
  45.  
  46.     END
  47.